/*
 * NodoContexto.cpp
 *
 *  Created on: 29/04/2012
 *      Author: lucas
 */

#include "../hdr/NodoContexto.h"
#include <stdio.h>

int NodoContexto::cantidadNodos = 0;

NodoContexto::NodoContexto() {
	cantidadNodos++;
}

// Para el nodo de contexto X, devuelve el nodo de contexto (caracter + X)
NodoContexto* NodoContexto::getNodoContextoSuperior(unsigned char caracter) {
	size_t largo = contextosOrdenSuperior.getLargo();
	size_t i;
	for (i = 0; i < largo && contextosOrdenSuperior[i] != caracter; i++);
	if(i < largo)
		return nodosOrdenSuperior[i];

	// No existe el nodo: lo creamos
	NodoContexto* nuevoNodo = new NodoContexto();
	contextosOrdenSuperior.append(caracter);
	nodosOrdenSuperior.append(nuevoNodo);
	return nuevoNodo;
}

NodoContexto::~NodoContexto() {
	limpiar();
	cantidadNodos--;
}

void NodoContexto::limpiar() {
	for (unsigned int i = 0; i < nodosOrdenSuperior.getLargo(); i++) {
		delete nodosOrdenSuperior[i];
	}
	nodosOrdenSuperior.limpiar();
	contextosOrdenSuperior.limpiar();
}

